home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / source / utils / msgpack / msgpack.c
Encoding:
C/C++ Source or Header  |  1992-12-26  |  2.9 KB  |  142 lines

  1. #include <exec/types.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "dh0:code/code20/defines.h"
  5. struct MailHeader MH;
  6. struct PackHeader 
  7. {
  8.    struct MailHeader MH;
  9.    long bytes;
  10. } PH;
  11. char conf[200];
  12. char MsgHead[200];
  13. char FileName[200];
  14. char OutPutName[200];
  15. char TempName[200];
  16. int TLock(char *str);
  17. void sr(char *str);
  18. main(int argc,char *argv[])
  19. {
  20.   char t[10];
  21.   int space=0;
  22.   char p[10];
  23.   FILE *fi,*fi1,*fo,*fo1;
  24.   p[0]=' ';
  25.   if(argc!=3)
  26.   {
  27.     printf("MsgPack version 1.0 written by Joseph Hodge\n");
  28.     printf("Usage: MsgPack <conference path> <output name>\n");
  29.     printf("   ie: MsgPack BBS:PD MSGS\n");
  30.     printf("\n");
  31.     printf("This is an AmiExpress 1.1w+ utility\n");
  32.     printf("\n\n");
  33.     exit(0);
  34.   }
  35.   strcpy(conf,argv[1]);
  36.   strcpy(OutPutName,argv[2]);
  37.   sr(conf);
  38.   sr(OutPutName);
  39.   if(!TLock(conf))
  40.   {
  41.     printf("Error, can't locate conference\n");
  42.     exit(0);
  43.   }
  44.   PH.bytes=0L;
  45.   sprintf(MsgHead,"%s/MsgBase/HeaderFile",conf);
  46.   if(!TLock(MsgHead))
  47.   {
  48.     printf("Error, can't locate MsgBase\n");
  49.     printf("\n");
  50.     exit(0);
  51.   }
  52.   
  53.   sprintf(TempName,"%s/MsgBase/Tmp",conf);
  54.   fi=fopen(MsgHead,"rb");
  55.   if(fi==NULL)
  56.   {
  57.     printf("Error, can't open HeaderFile\n\n");
  58.     exit(0);
  59.   }
  60.   while(fread((APTR)&PH.MH,sizeof(struct MailHeader),1,fi)!=NULL)
  61.   {
  62.      sprintf(FileName,"%s/MsgBase/%d",conf,PH.MH.MsgNumb);
  63.      if(TLock(FileName))
  64.      {
  65.        fi1=fopen(FileName,"rb");
  66.        fo1=fopen(TempName,"ab");
  67.        while(fread((APTR)&t,sizeof(char),1,fi1)!=NULL)
  68.        {
  69.          if(space>0 && t[0]!=' ')
  70.          {
  71.            p[1]=space;
  72.            fwrite((APTR)&p,sizeof(char),2,fo1);
  73.            PH.bytes +=2L; space=0;
  74.          }
  75.          if(t[0]==' ')
  76.          {
  77.            space +=1L;
  78.            if(space==100)
  79.            {
  80.              p[1]=space;
  81.              fwrite((APTR)&p,sizeof(char),2,fo1);
  82.              PH.bytes +=2L; space=0;
  83.            }
  84.          }
  85.          else
  86.          {
  87.            fwrite((APTR)&t,sizeof(char),1,fo1);
  88.            PH.bytes +=1L;
  89.          }
  90.        }
  91.        if(space>0)
  92.        {
  93.          p[1]=space;
  94.            fwrite((APTR)&p,sizeof(char),2,fo1);
  95.            PH.bytes +=2L; space=0;
  96.        }
  97.        fclose(fo1);
  98.        fclose(fi1);
  99.        fo1=fopen(OutPutName,"ab");
  100.        if(fo1==NULL)
  101.        {
  102.          printf("Error, can't open out file\n");
  103.          printf("\n");
  104.          fclose(fi);
  105.          exit(0);
  106.        }
  107.        fwrite((APTR)&PH,sizeof(struct PackHeader),1,fo1);
  108.        fi1=fopen(TempName,"rb");
  109.        while(fread((APTR)&t,sizeof(char),1,fi1)!=NULL)
  110.        {
  111.          fwrite((APTR)&t,sizeof(char),1,fo1);
  112.        }
  113.        fclose(fo1);
  114.        fclose(fi1);
  115.        DeleteFile(TempName);
  116.        PH.bytes=0L;
  117.      }
  118.   }
  119.   fclose(fi);
  120.  
  121. }
  122. void sr(char *str)
  123. {
  124.   register int i;
  125.   i=strlen(str)-1;
  126.   while(i>-1)
  127.   {
  128.     if(*(str+i)<=32) *(str+i)='\0'; else break;
  129.     i--; 
  130.   }
  131. }
  132. #define ACCESS_READ -2
  133. int TLock(char *str)
  134. {
  135.   long lock;
  136.   if(lock=Lock(str,ACCESS_READ))
  137.   {
  138.     UnLock(lock); return(1);
  139.   }
  140.   return(0);
  141. }
  142.